Epoch หรือ Unix Epoch คือ
ปัจจุบันการระบุวันเวลามีด้วยกันหลายวิธีหรือหลายรูปแบบ และ หน่วยวัดที่หลากหลายเช่น ปี, เดือน, วัน, ชั่วโมง, นาที, วินาที เป็นสาเหตุให้หลายท่านอาจจะได้ยินและสงสัยคำว่า Epoch หรือ Unix Epoche คือ อะไร เนื่องจากรูปแบบการระบุเวลายังไม่มีมาตราฐานชัดเจน แต่สำหรับการเขียน program ที่จำเป็นต้องอ้างอิงวันเวลา รวมถึงการคำนวณในหน่วยเวลาที่เป็นมาตราฐานเดียวกัน Epoch จึงเป็นมาตราฐานอย่างนึงในการระบุเวลา โดยการอ้างอิงระยะห่างจากวันที่ใช้อ้างอิง จนถึงวันที่กำหนดเป็นหน่วยวินาที ส่วนช่วงเวลาที่ก่อนหน้านั้นจะใช้เป็นค่าลบแทน ซึ่งวันที่ใช้อ้างอิงดังกล่าวมีได้หลายแบบขึ้นอยู่กับ software ที่ใช้งาน เช่น วันที่ UTC (00:00) January 1, 1900 เป็นเวลามาตราฐานของ Network Time Protocol (NTP) แต่ ที่เรานิยมพูดถึงหรือใช้งานกับ Unix, Linux หรือ programming ซึ่ง Unix Epoch จะมีวันที่อ้างอิงคือ January 1, 1970 นั้นหมายถึงว่า 1 วันถัดไปจะมีค่าเท่ากับ 60 x 60 x 24 = 86,400 วินาที ซึ่ง Unix Epoch คือ วันที่ January 2, 1970 ด้วยนั้นเอง
ตัวอย่างเช่น
- 01 Jan 1970 00:00:00 GMT ค่า Unix Epoch เท่ากับ 0
- 02 Jan 1970 00:00:00 GMT ค่า Unix Epoch เท่ากับ 86400
- 01 Jan 1971 00:00:00 GMT ค่า Unix Epoch เท่ากับ 31536000
- 21 May 2017 18:00:00 GMT ค่า Unix Epoch เท่ากับ 1495389600
จากข้อมูลที่อธิบายมาจะเห็นว่า Epoch หรือ Unix Epoch คือ การระบุจุดของเวลา รวมถึงสามารถบอกระยะห่างของเวลาดังกล่าวในหน่วยวินาทีได้อีกด้วย และการที่ programming นิยมใช้ Epoch หรือ Unix Epoch คือ สำหรับการเก็บค่าของเวลาเพราะ เมื่อเราทำการคำนวณหาระยะเวลาของเวลา 2 ช่วง เราสามารถนำค่า Epoch มาลบกันโดยตรงทางวิธีคณิตศาสตร์ออกมาได้ทันที ซึ่งง่ายต่อการเขียน program มาก
ทดลองแปลงค่าผ่านเว็ป epoch converter ได้ครับ
วิธีการหาค่า Epoch หรือ Unix Epoch
Unix Linux command
$ date +%s 1495390618
Programming language
Language | Command |
Perl | time |
PHP | time() |
Ruby | Time.now (or Time.new ). To display the epoch: Time.now.to_i |
Python | import time first, then int(time.time()) |
Java | long epoch = System.currentTimeMillis()/1000; |
Microsoft .NET C# | epoch = (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000; |
VBScript/ASP | DateDiff("s", "01/01/1970 00:00:00", Now()) |
Erlang | calendar:datetime_to_gregorian_seconds(calendar:now_to_universal_time( now()))-719528*24*3600. OR element(1, now()) * 10000 + element(2, now()). |
MySQL | SELECT unix_timestamp(now()) |
PostgreSQL | SELECT extract(epoch FROM now()); |
Oracle PL/SQL | SELECT (SYSDATE - TO_DATE('01-01-1970 00:00:00', 'DD-MM-YYYY HH24:MI:SS')) * |
SQL Server | SELECT DATEDIFF(s, '1970-01-01 00:00:00', GETUTCDATE()) |
JavaScript | Math.round(new Date().getTime()/1000.0) getTime() returns time in milliseconds. |
Unix/Linux Shell | date +%s |
PowerShell | Get-Date -UFormat "%s" Produces: 1279152364.63599 |
Actionscript | (new Date()).time |
Other OS’s | Command line: perl -e "print time" (If Perl is installed on your system) |
ColdFusion (CFML) MX 6.1+ | #int( getTickCount() / 1000 )# |
Bash | Command Line: date +%s |
ตารางวันที่อ้างอิงของ Epoch program
Epoch date | Notable uses | Rationale for selection |
---|---|---|
January 0, 1 BC | MATLAB | |
January 1, AD 1 | Microsoft.NET, Go, REXX, Rata Die | Common Era, ISO 2014, RFC 3339 |
January 1, 1601 | NTFS, COBOL, Win32/Win64 | 1601 was the first year of the 400-year Gregorian calendar cycle at the time Windows NT was made. |
December 31, 1840 | MUMPS programming language | 1841 was a non-leap year several years before the birth year of the oldest living US citizen when the language was designed. |
November 17, 1858 | VMS, United States Naval Observatory, DVB-SI 16-bit day stamps, other astronomy-related computations | November 17, 1858, 00:00:00 UT is the zero of the Modified Julian Day (MJD) equivalent to Julian day 2400000.5 |
December 30, 1899 | Microsoft COM DATE, Object Pascal, LibreOffice Calc, Google Sheets | Technical internal value used by Microsoft Excel; for compatibility with Lotus 1-2-3. |
December 31, 1899 | Microsoft C/C++ 7.0 | A change in Microsoft’s last version of non-Visual C/C++ that was subsequently reverted. |
January 0, 1900 | Microsoft Excel, Lotus 1-2-3 | While logically January 0,1900 is equivalent to December 31, 1899, these systems do not allow users to specify the latter date. |
January 1, 1900 | Network Time Protocol, IBM CICS, Mathematica, RISC OS, VME, Common Lisp, Michigan Terminal System | |
January 1, 1904 | , LabVIEW, Apple Inc.’s classic Mac OS, Palm OS, MP4, Microsoft Excel (optionally), IGOR Pro | 1904 is the first leap year of the 20th century. |
December 31, 1967 | Pick OS and variants (jBASE, Universe, Unidata, Revelation, Reality) | Chosen so that (date mod 7) would produce 0=Sunday, 1=Monday, 2=Tuesday, 3=Wednesday, 4=Thursday, 5=Friday, and 6=Saturday. |
January 1, 1970 | Unix Epoch aka POSIX time, used by Unix and Unix-like systems (Linux, macOS), and programming languages: most C/C++ implementations, Java, JavaScript, Perl, PHP, Python, Ruby, Tcl, ActionScript. Also used by Precision Time Protocol. | |
January 1, 1980 | IBM BIOS INT 1Ah, DOS, OS/2, FAT12, FAT16, FAT32, exFAT filesystems | The IBM PC with its BIOS as well as 86-DOS, MS-DOS and PC DOS with their FAT12 file system were developed and introduced between 1980 and 1981 |
January 6, 1980 | Qualcomm BREW, GPS, ATSC 32-bit time stamps | GPS counts weeks (a week is defined to start on Sunday) and January 6 is the first Sunday of 1980. |
January 1, 2000 | AppleSingle, AppleDouble, PostgreSQL, ZigBee UTCTime | |
January 1, 2001 | Apple’s Cocoa framework | 2001 is the year of the release of Mac OS X 10.0 (but NSDate for Apple’s EOF 1.0 was developed in 1994). |
Author: Suphakit Annoppornchai
Credit: https://saixiii.com, https://en.wikipedia.org